import { defineStore } from 'pinia' //可省略
import { loginPhoneCode } from '@/api/loginPhoneCode'
import type { UserData } from '@/common/user/user'

export const useUserStore = defineStore('user', {
  state: () => {
    return {
      user: {} as UserData,
      //未登录状态
      loginStatus: false,
      follow: false //关注状态:未关注
    }
  },
  persist: true, // 默认情况下，整个store都会被持久化
  actions: {
    // 初始化缓存大小
    async initCacheSize() {
      const storageInfo = await uni.getStorageInfo()
      return storageInfo.currentSize
    },
    // 清除缓存
    async clearCache() {
      await uni.clearStorage()
    },
    loginCode(phone: string, code: string) {
      return new Promise<UserData>((resolve, reject) => {
        loginPhoneCode(phone, code)
          .then((res) => {
            console.log(res)
            this.user = res.data
            if (this.user) {
              this.user.token = res.data.token
              uni.setStorageSync('token', res.data.token)
              this.loginStatus = true
              resolve(res.data)
            }
          })
          .catch((err) => {
            reject(err.message)
          })
      })
    },
    // 退出登录
    logOut() {
      this.user = {} as UserData
      this.loginStatus = false
      uni.removeStorageSync('token')
      uni.showToast({
        title: '退出登录成功',
        icon: 'success',
        duration: 3500
      })
    },
    //   登录状态处理以及未登录状态下的路径跳转及白名单的路径设置
    // 处理未登录状态下的路径跳转
    isNotLogin(path: string) {
      const token = uni.getStorageSync('token')
      if (!token && !this.loginStatus) {
        const whiteList = ['user-login', 'user-setting', 'about-us'] //白名单（给不能跳转的页面开通道）的路径
        //即将跳转的路径
        const url = whiteList.filter((item) => item === path) // 白名单的路径实现跳转
        if (url.length > 0) {
          // 如果url的值为'',就不执行下面代码
          uni.navigateTo({
            url: `/pages/${url}/${url}` // 只能跳转的路径，也就是白名单的路径
          })
        } else {
          uni.navigateTo({
            url: '/pages/user-login/user-login' // 不是白名单又没有登录的直接跳转到登录页面
          })
        }
      }
    },
    // 处理登录状态下的函数处理逻辑
    authAction(callback: () => void) {
      const token = uni.getStorageSync('token')
      if (this.loginStatus && token) {
        callback()
        return
      } else {
        this.isNotLogin('user-login')
      }
    }
  }
})
